package ma.myschool.app.service.impl;

import java.util.List;

import ma.myschool.app.dao.PaiementDao;
import ma.myschool.app.dao.PaiementHistoryDao;
import ma.myschool.app.model.AnneeScolaire;
import ma.myschool.app.model.MoisPaye;
import ma.myschool.app.model.Paiement;
import ma.myschool.app.model.PaiementHistory;
import ma.myschool.app.service.PaiementManager;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * Implementation of RoleManager interface.
 *
 * @author <a href="mailto:dan@getrolling.com">Dan Kibler</a>
 */
@Service("paiementManager")
public class PaiementManagerImpl extends GenericManagerImpl<Paiement, Long> implements PaiementManager {
    PaiementDao paiementDao;
    PaiementHistoryDao paiementHistoryDao;

    @Autowired
    public PaiementManagerImpl(PaiementDao paiementDao) {
        super(paiementDao);
        this.paiementDao = paiementDao;
    }
    
    @Autowired
	public void setPaiementHistoryDao(PaiementHistoryDao paiementHistoryDao) {
		this.paiementHistoryDao = paiementHistoryDao;
	}



	@Override
	public List<Paiement> loadPaiementsByEleve(Long idEleve, AnneeScolaire anneeScolaire) {
		return paiementDao.loadPaiementsByEleve(idEleve, anneeScolaire);
	}

	@Override
	public List<Paiement> loadPaiementsWithResteByEleve(Long id) {
		return paiementDao.loadPaiementsWithResteByEleve(id);
	}

	@Override
	public Number sumAvancePaiements(AnneeScolaire anneeScolaire) {
		return paiementDao.sumAvancePaiements(anneeScolaire);
	}

	@Override
	public Number sumAvancePaimentParMois(MoisPaye moisPaye, AnneeScolaire anneeScolaire) {
		return paiementDao.sumAvancePaimentParMois(moisPaye, anneeScolaire);
	}

	@Override
	public Number sumRestePaimentParMois(MoisPaye moisPaye,
			AnneeScolaire anneeScolaire) {
		return paiementDao.sumRestePaimentParMois(moisPaye, anneeScolaire);
	}

	@Override
	public Number sumAllPaiementsPrevu() {
		return paiementDao.sumAllPaiementsPrevu();
	}

	@Override
	public Number sumAllRestePaiement(AnneeScolaire anneeScolaire) {
		return paiementDao.sumAllRestePaiement(anneeScolaire);
	}
	
	@Override
	public Paiement save(Paiement paiement) {
		Paiement p = paiementDao.save(paiement);
		
		paiementHistoryDao.save(new PaiementHistory(p.getId(), 
				p.getDatePaiement(), p.getModePaiement(), p.getNumeroCheque(), 
					p.getAvance(), p.getReste(), p.getDescriptionAvanceJustifie()));
		
		return p;
	}

}